#ifndef MU_TOKEN_H
#define MU_TOKEN_H

#include <string>

#include "object.h"

enum TokenKind {
  ID,
  KW,
  OP,
  LITERAL,
  SPACE,
  CR,
  EOL
};

struct Token {
  std::wstring text;
  TokenKind kind;
  Object *ref;

  Token() {}

  Token(TokenKind kind) : kind(kind), ref(nullptr) {}

  Token(TokenKind kind, std::wstring text, Object *obj = nullptr) : kind(kind), text(std::move(text)), ref(obj) {}

  std::string print();
};


#endif //MU_TOKEN_H
